const { DataTypes } = require('sequelize');
const { sequelize } = require('../library/sequelize.js');

// 定义user模型
const user = sequelize.define('ly_user', {
    // 用户表：主键ID；用户的登录方式有账号登录和微信登录两种，账号和微信openid必须有其中一种且不为空字符串，不为空字符串的时候分别唯一
    user_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        primaryKey: true,
        autoIncrement: true,
        comment: '用户表：主键ID；用户的登录方式有账号登录和微信登录两种，账号和微信openid必须有其中一种且不为空字符串，不为空字符串的时候分别唯一'
    },

    // 账号,如果有则唯一
    name_en: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        unique: true,
        comment: '账号,如果有则唯一'
    },

    // 中文昵称
    name_cn: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '中文昵称'
    },

    // 密码
    password_text: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '密码'
    },

    // 密码混淆随机值
    password_solt: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '密码混淆随机值'
    },

    // 自定义头像
    avatar: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '自定义头像'
    },

    // 真实姓名
    real_name: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '真实姓名'
    },

    // 手机号，如果有则唯一
    moblie: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '手机号，如果有则唯一'
    },

    // 身份证号，如果有则唯一
    card_number: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '身份证号，如果有则唯一'
    },

    // 邮箱，如果有则唯一
    email: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '邮箱，如果有则唯一'
    },

    // 地址
    address: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '地址'
    },

    // 用户级别
    user_level: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '用户级别'
    },

    // 系统头像

    // 系统头像
    icon_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '系统头像'
    },

    // 微信openid,如果有则唯一
    openid: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '微信openid,如果有则唯一'
    },

    // 是否正式账号
    is_formal: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否正式账号'
    },

    // 是否删除,软删除,管理也无法查看,只有通过sql查看
    is_delete: {
        type: DataTypes.TINYINT.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '是否删除,软删除,管理也无法查看,只有通过sql查看'
    },

    // 创建时间
    create_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '创建时间'
    },

    // 更新时间
    update_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '更新时间'
    }
}, {
    tableName: 'ly_user',
    timestamps: false, // 不使用Sequelize的默认时间戳
    indexes: [
        {
            name: '账号',
            unique: true,
            fields: ['name_en']
        },
        {
            name: '创建时间',
            fields: ['create_time']
        },
        {
            name: '更新时间',
            fields: ['update_time']
        }
    ],
    comment: '用户总表'
});

// 模型初始化
async function initModel() {
    try {
        await user.sync({ alter: false }); // 不自动修改表结构
        console.log('✅ User模型初始化成功');
        return true;
    } catch (error) {
        console.error('❌ User模型初始化失败:', error);
        return false;
    }
}

// 工具方法：获取当前时间戳
function getCurrentTimestamp() {
    return Math.floor(Date.now() / 1000);
}

// 工具方法：创建用户时的默认值处理
function getCreateDefaults() {
    const now = getCurrentTimestamp();
    return {
        create_time: now,
        update_time: now,
        is_delete: 0,
        is_formal: 0
    };
}

// 工具方法：更新用户时的时间戳处理
function getUpdateDefaults() {
    return {
        update_time: getCurrentTimestamp()
    };
}

module.exports = {
    userModel: user,
    initModel,
    getCurrentTimestamp,
    getCreateDefaults,
    getUpdateDefaults
};